import re
from utils.title_level.title_re import rules_regex

def compare_and_take_max(a, b):
    return [max(a[i], b[i]) for i in range(len(a))]

def update_font_size_and_find_max(data):
    """
    更新字典中的 'font_size'，如果 'font_size' 为列表，则计算其平均值并替换原值。
    同时，找到 'font_size' 最大的键并返回。

    参数：
        data (dict): 包含多个键值对的字典，每个键对应一个字典，其中有 'font_size' 和 'level'。

    返回：
        tuple: 返回一个元组，包含两个元素：
            - 更新后的字典 (dict)，其中 'font_size' 已替换为其平均值。
            - 最大 'font_size' 对应的键 (str)，如果字典中存在列表类型的 'font_size'，则返回对应的键。
    
    示例：
        input_data = {
            'key1': {'font_size': [12, 14, 16], 'level': 0},
            'key2': {'font_size': 10, 'level': 1}
        }
        updated_data, max_key = update_font_size_and_find_max(input_data)
        print(updated_data)  # 字典中 'font_size' 被更新为平均值
        print(max_key)       # 输出最大 'font_size' 对应的键
    """
    
    # 初始化最大font_size为负无穷，便于后续比较
    max_font_size = -float('inf')  # 初始值设为负无穷
    max_key = None  # 用来存储最大font_size对应的key

    # 遍历字典中的所有键值对
    for key, value in data.items():
        # 判断当前项的 'font_size' 是否是列表类型
        if isinstance(value.get('font_size'), list):
            # 计算该列表的平均font_size
            avg_font_size = sum(value['font_size']) / len(value['font_size'])
            # 用计算出的平均值替换原来的 font_size
            value['font_size'] = avg_font_size

        # 更新最大font_size和对应的key
        # 如果当前项的 'font_size' 大于最大值
        if value['font_size'] > max_font_size:
            max_font_size = value['font_size']  # 更新最大font_size
            max_key = key  # 更新最大font_size对应的key

    # 返回更新后的字典以及最大font_size对应的key
    return data, max_key


# 获取标题种类
def get_title_count(pdf_info:list, start_page:int = 1):
    """
    获取标题目录,确认一级标题

    参数：
    pdf_info (list): pipeline以后的pdf内容

    返回值: title_dict, pattern
    title_dict (dict):{匹配规则：{字体大小,等级},}
    pattern (str): 规则一级标题的匹配规则
    """
    # 设置一个空字典,用于存储标题匹配规则、字体大小和标题等级
    title_dict = {}
    max_font_size = 0
    # 获取标题字典

    # 遍历页
    for pdf_page in pdf_info[start_page:]:
        # 遍历块
        for block in pdf_page['para_blocks']:
            if block['type'] == 'title':
                # 遍历行
                for line in block['lines']:
                    # print(line)
                    # 计算字体大小
                    font_size = line['bbox'][3] - line['bbox'][1]
                    # 规则匹配
                    flag = 0  # 标志位,用于判断是否匹配到规则
                    for rule_regex in rules_regex:
                        if line["spans"] and re.search(rule_regex['pattern'], line["spans"][0]["content"]):
                            # print(rule_regex)
                            flag = 1
                            # 获取最大字体大小
                            if max_font_size < font_size:
                                # if font_size ==18:
                                    # print(line["spans"][0]["content"])
                                max_font_size = font_size
                            if rule_regex['pattern'] not in title_dict:
                                # title_dict[rule_regex['pattern']] = {"font_size": font_size, "level": 0}
                                title_dict[rule_regex['pattern']] = {"font_size": [font_size], "level": 0}
                                break
                            # elif title_dict[rule_regex['pattern']]["font_size"] < font_size:
                            #     title_dict[rule_regex['pattern']]["font_size"] = font_size
                            #     break
                            else:
                                title_dict[rule_regex['pattern']]["font_size"].append(font_size)
                            break
                    # 规则不可匹配
                    if line["spans"] and flag == 0:
                        title_dict[line["spans"][0]["content"]] = {"font_size": 0, "level": -1}

    # 确定一级标题
    title_dict, pattern = update_font_size_and_find_max(title_dict)
    
    return title_dict, pattern



